package com.ling.web.video.extractor

import com.ling.web.video.extractor.callback.OnParseCallback
import com.ling.web.video.extractor.model.PriorityMode

/**
 * @author Ling
 * @date :2024/11/11 16:29
 */
interface WebVideoExtractor {

    /**
    * 清除已解析的缓存
    * 如果用户手动刷新webView，则需要先调用这个方法，否则解析时，会判断是重复链接直接跳过的
    * */
    fun clearParsedCache()

    /**
     * 自动根据优先模式进行解析，详见枚举类：
     * @see PriorityMode
     * @param title 当前站点的名字
     * @param webUrl 当前站点url，少数视频依靠这个url解析
     * @param resourceUrl 当前站点资源地址
     * @param onParseCallback 回调解析结果
     * */
    fun extractorVideoByPriorityMode(title : String , webUrl : String , resourceUrl: String , priorityMode: PriorityMode , onParseCallback: OnParseCallback?)

    /**
     * 依靠api解析视频 , 只能解析视频地址是站点url的，如果是内嵌的则解析不了，请使用 extractorVideoWithResource()
     * @param webUrl 当前站点url，少数视频依靠这个url解析
     * @param onParseCallback 回调解析结果
     * */
    fun extractorVideoWithApi(webUrl : String , onParseCallback: OnParseCallback?)

    /**
    * 依靠webView的资源路径解析视频
    * @param title 当前站点的名字
    * @param webUrl 当前站点url，少数视频依靠这个url解析
    * @param resourceUrl 当前站点资源地址
    * @param onParseCallback 回调解析结果
    * */
    fun extractorVideoWithResource(title : String , webUrl : String , resourceUrl : String , onParseCallback: OnParseCallback?)

    /**
     * 解析youtube视频
     * @param webUrl 当前站点url
     * @param onParseCallback 回调解析结果
     * */
    fun extractorYoutubeVideo(webUrl : String,  onParseCallback: OnParseCallback?)

    /**
     * 解析可用api也可用资源路径的视频
     * @param title 当前站点的名字
     * @param webUrl 当前站点url，少数视频依靠这个url解析
     * @param resourceUrl 当前站点资源地址
     * @param useApi 是否使用api
     * @param onParseCallback 回调解析结果
     * */
    fun extractorFaceBookVideo(title : String , webUrl : String , resourceUrl : String , useApi : Boolean , onParseCallback: OnParseCallback?)

    fun extractorImdbVideo(title : String , webUrl : String , resourceUrl : String , useApi : Boolean,  onParseCallback: OnParseCallback?)

    fun extractorVimeoVideo(title : String , webUrl : String , resourceUrl : String , useApi : Boolean ,  onParseCallback: OnParseCallback?)

    fun extractorBuzzVideo(title : String , webUrl : String , resourceUrl : String , useApi : Boolean ,  onParseCallback: OnParseCallback?)

    fun extractorTwitchVideo(title : String , webUrl : String , resourceUrl : String , useApi : Boolean ,  onParseCallback: OnParseCallback?)

    fun extractorInstagramVideo(title : String , webUrl : String , resourceUrl : String , useApi : Boolean ,  onParseCallback: OnParseCallback?)

    /**
     * 解析Fox网站，这个网站的视频播放不了，所以通过资源链接无法拿到有效视频链接，不知道是否国内网络环境问题，但可以通过yt-dlp解析出来
     * @param title 当前站点的名字
     * @param webUrl 当前站点url，少数视频依靠这个url解析
     * @param resourceUrl 当前站点资源地址
     * @param onParseCallback 回调解析结果
     * */
    fun extractorFoxVideo(title : String , webUrl : String , resourceUrl : String , onParseCallback: OnParseCallback?)

    /**
     * 解析网站是内嵌视频的
     * @param title 当前站点的名字
     * @param webUrl 当前站点url，少数视频依靠这个url解析
     * @param resourceUrl 当前站点资源地址
     * @param onParseCallback 回调解析结果
     * */
    fun extractorYahooVideo(title : String , webUrl : String , resourceUrl : String , onParseCallback: OnParseCallback?)

    fun extractorEspnVideo(title : String , webUrl : String , resourceUrl : String , onParseCallback: OnParseCallback?)

    /**
     * 通过head请求，判断content-type是否包含video关键字
     * @param title 当前站点的名字
     * @param webUrl 当前站点url，少数视频依靠这个url解析
     * @param resourceUrl 当前站点资源地址
     * @param onParseCallback 回调解析结果
     * */
    fun extractorHeadVideo(title : String , webUrl : String , resourceUrl : String , onParseCallback: OnParseCallback?)
}